<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>闭包</title>
</head>
<body>
    <script>
       function test01(){
          m = 10;//全局变量
       }
       test01();
       console.log(m);


       //闭包的笔试题
       function f1(){
         var n = 99;//局部变量

         //add是全局变量
         add = function(){
            n++;
         }
         function f2(){
            console.log(n);
        
         }
         return f2;
       }

       //result代表f2的引用,   f2函数在内存中.
       let result=f1();
       result();//99

       //f2函数依赖于f1函数,f2在内存中,导致f1也在内存中.
       //f1中的局部变量n也贮存在内存中.
       //闭包的使用要慎用.

       //作用-闭包就是能够读取其他函数内部变量的函数
       add();

       result();//100

       //把函数作为一个参数进行传递
       function sub(a,b){ 
         return a -b;
       }

       //fun代表函数的引用
       function test02(a,b,fun){
         return a + b + fun(a,b);
       }

       alert(test02(10,5,sub));

    </script>
</body>
</html>